package org.demo.kong.api;

import org.demo.kong.dto.request.ConsumerCreateJwtReq;
import org.demo.kong.dto.request.ConsumerCreateOauth2Req;
import org.demo.kong.dto.request.ConsumerCreateReq;
import org.demo.kong.dto.response.ConsumerJwtListRes;
import org.demo.kong.dto.response.ConsumerListRes;
import org.demo.kong.dto.response.ConsumerOauth2ListRes;
import org.demo.kong.entity.Consumer;
import org.demo.kong.entity.ConsumerJwt;
import org.demo.kong.entity.ConsumerOauth2;
import retrofit2.Call;
import retrofit2.http.*;

/**
 * 作者： lzw<br/>
 * 创建时间：2019-01-15 10:31 <br/>
 */
public interface ConsumerApi {

    /**
     * 查询用户列表
     */
    @GET("/consumers")
    Call<ConsumerListRes> list(@Query("custom_id") String customId);

    /**
     * 新增用户
     */
    @POST("/consumers")
    Call<Consumer> create(@Body ConsumerCreateReq consumerCreateReq);

    /**
     * 删除用户
     *
     * @param username 用户名 或 用户ID
     */
    @DELETE("/consumers/{username}")
    Call<Void> delete(@Path("username") String username);

    /**
     * 查询用户所有JWT信息
     *
     * @param username 用户名 或 用户ID
     */
    @GET("/consumers/{username}/jwt")
    Call<ConsumerJwtListRes> listJwt(@Path("username") String username);

    /**
     * 为用户新增JWT授权
     *
     * @param username 用户名 或 用户ID
     */
    @POST("/consumers/{username}/jwt")
    Call<ConsumerJwt> createJwt(@Path("username") String username, @Body ConsumerCreateJwtReq consumerCreateJwtReq);

    /**
     * 删除用户的JWT
     *
     * @param username 用户名 或 用户ID
     * @param jwtId    JWT ID
     */
    @DELETE("/consumers/{username}/jwt/{jwtId}")
    Call<Void> deleteJwt(@Path("username") String username, @Path("jwtId") String jwtId);


    /**
     * 查询用户所有Oauth2信息
     *
     * @param username 用户名 或 用户ID
     */
    @GET("/consumers/{username}/oauth2")
    Call<ConsumerOauth2ListRes> listOauth2(@Path("username") String username);

    /**
     * 为用户新增Oauth2授权
     *
     * @param username 用户名 或 用户ID
     */
    @POST("/consumers/{username}/oauth2")
    Call<ConsumerOauth2> createOauth2(@Path("username") String username, @Body ConsumerCreateOauth2Req consumerCreateOauth2Req);

    /**
     * 删除用户的Oauth2
     *
     * @param username 用户名 或 用户ID
     * @param oauth2Id Oauth2 ID
     */
    @DELETE("/consumers/{username}/oauth2/{oauth2Id}")
    Call<Void> deleteOauth2(@Path("username") String username, @Path("oauth2Id") String oauth2Id);
}
